home *** CD-ROM | disk | FTP | other *** search
Text File | 1998-06-24 | 34.1 KB | 1,436 lines |
- ;;;; debug on,lattice4,code,data
- multipass
- mc68000
-
- xdef _unpackbytedelta
- xdef _unpackbytedeltaxor
- xdef _unpackbytedeltanodirty
- xdef _unpackbytedeltanodirtyxor
- xdef _unpackanim7long
- xdef _unpackanim7longnodirty
- xdef _unpackanim7word
- xdef _unpackanim7wordnodirty
- xdef _unpackanim8long
- xdef _unpackanim8longnodirty
- xdef _unpackanim8word
- xdef _unpackanim8wordnodirty
-
- ;***********************************************************************
-
- ;void __asm unpackbytedelta (register __a0 BYTE *bdata,
- ; register __a1 PLANEPTR plane,
- ; register __d0 WORD bytesperrow,
- ; register __a2 WORD *dirty);
-
- ; d1 = x
- ; d2 = tmp
- ; d3 = count
- ; d4 = w
- ; d5 = first
- ; d6 = last
- ; d7 = ub, temporary
-
- ; a3 = bp
- ; a4 = y
-
- _unpackbytedelta
- movem.l d2-d7/a2-a4,-(sp)
- ext.l d0 ; bytesperrow
- moveq #0,d1 ; x = 0
- .xloop moveq #-1,d5 ; first = -1
- moveq #-1,d6 ; last = -1
- movea.l a1,a3 ; bp = plane
- addq.l #1,a1 ; plane++
- suba.l a4,a4 ; y = 0
- moveq #0,d3
- move.b (a0)+,d3 ; count = *bdata++
- bra .endloop2
- .loop2 moveq #0,d4
- move.b (a0)+,d4 ; w = *bdata++
- ble 1$ ; branch if w <= 0
- adda.l d4,a4 ; y += w
- mulu.w d0,d4
- adda.l d4,a3 ; bp += w * bytesperrow
- .endloop2 dbra d3,.loop2
- bra .endxloop
-
- 1$ beq 3$ ; branch if w == 0
- tst.w d5
- bge 2$ ; branch if first >= 0
- move.w a4,d5 ; first = y
- 2$ and.w #$7f,d4 ; w &= 0x7f
- adda.l d4,a4 ; y += w
- move.w a4,d6 ; last = y
- move.w d4,d7
- lsr.w #3,d4
- and.w #7,d7
- add.w d7,d7
- add.w d7,d7
- neg.w d7
- jmp (.endwloop,pc,d7.w)
- .wloop move.b (a0)+,(a3) ; *bp = *data++
- adda.l d0,a3 ; bp += bytesperrow
- move.b (a0)+,(a3) ; *bp = *data++
- adda.l d0,a3 ; bp += bytesperrow
- move.b (a0)+,(a3) ; *bp = *data++
- adda.l d0,a3 ; bp += bytesperrow
- move.b (a0)+,(a3) ; *bp = *data++
- adda.l d0,a3 ; bp += bytesperrow
- move.b (a0)+,(a3) ; *bp = *data++
- adda.l d0,a3 ; bp += bytesperrow
- move.b (a0)+,(a3) ; *bp = *data++
- adda.l d0,a3 ; bp += bytesperrow
- move.b (a0)+,(a3) ; *bp = *data++
- adda.l d0,a3 ; bp += bytesperrow
- move.b (a0)+,(a3) ; *bp = *data++
- adda.l d0,a3 ; bp += bytesperrow
- .endwloop dbra d4,.wloop
- dbra d3,.loop2
- bra .endxloop
-
- 3$ tst.w d5
- bge 4$ ; branch if first >= 0
- move.w a4,d5 ; first = y
- 4$ moveq #0,d7
- move.b (a0)+,d7 ; ub = *bdata++
- adda.l d7,a4 ; y += ub
- move.w a4,d6 ; last = y
- move.b (a0)+,d4 ; w = *bdata++
- move.w d7,d2
- lsr.w #3,d7
- and.w #7,d2
- add.w d2,d2
- add.w d2,d2
- neg.w d2
- jmp (.endubloop,pc,d2.w)
- .ubloop move.b d4,(a3) ; *bp = w
- adda.l d0,a3 ; bp += bytesperrow
- move.b d4,(a3) ; *bp = w
- adda.l d0,a3 ; bp += bytesperrow
- move.b d4,(a3) ; *bp = w
- adda.l d0,a3 ; bp += bytesperrow
- move.b d4,(a3) ; *bp = w
- adda.l d0,a3 ; bp += bytesperrow
- move.b d4,(a3) ; *bp = w
- adda.l d0,a3 ; bp += bytesperrow
- move.b d4,(a3) ; *bp = w
- adda.l d0,a3 ; bp += bytesperrow
- move.b d4,(a3) ; *bp = w
- adda.l d0,a3 ; bp += bytesperrow
- move.b d4,(a3) ; *bp = w
- adda.l d0,a3 ; bp += bytesperrow
- .endubloop dbra d7,.ubloop
-
- dbra d3,.loop2
-
- .endxloop tst.w d5
- blt 8$ ; branch if first < 0
- move.w (a2),d7
- blt 5$ ; branch if dirty[0] < 0
- cmp.w d5,d7
- ble 6$ ; branch if dirty[0] <= first
- 5$ move.w d5,(a2) ; dirty[0] = first
- 6$ move.w (2,a2),d7
- blt 7$ ; branch if dirty[1] < 0
- cmp.w d6,d7
- bge 8$ ; branch if dirty[1] >= last
- 7$ move.w d6,(2,a2) ; dirty[1] = last
- 8$ move.w d1,d7
- and.w #3,d7
- cmp.w #3,d7
- bne 9$
- addq.l #4,a2 ; dirty += 2
- 9$ addq.w #1,d1 ; x++
- cmp.w d0,d1
- blt .xloop ; branch if x < bytesperrow
- movem.l (sp)+,d2-d7/a2-a4
- rts
-
- ;{
- ; WORD x, y, count, w, first, last;
- ; BYTE *bp;
- ; UBYTE ub;
- ;
- ; for (x = 0; x < bytesperrow; x++) {
- ; first = -1;
- ; last = -1;
- ; bp = &plane[x];
- ; y = 0;
- ; for (count = *bdata++; count > 0; count--) {
- ; if ((w = *bdata++) > 0) {
- ; y += w;
- ; bp += w * bytesperrow;
- ; } else if (w < 0) {
- ; if (first < 0)
- ; first = y;
- ; last = (y += (w &= 0x7f));
- ; for ( ; w > 0; w--) {
- ; *bp = *bdata++;
- ; bp += bytesperrow;
- ; }
- ; } else /* w == 0 */ {
- ; if (first < 0)
- ; first = y;
- ; last = (y += (ub = (UBYTE)*bdata++));
- ; w = *bdata++;
- ; for ( ; ub > 0; ub--) {
- ; *bp = w;
- ; bp += bytesperrow;
- ; }
- ; }
- ; }
- ; if (first >= 0 && (dirty[0] < 0 || first < dirty[0]))
- ; dirty[0] = first;
- ; if (last >= 0 && (dirty[1] < 0 || last > dirty[1]))
- ; dirty[1] = last;
- ; if ((x & 3) == 3)
- ; dirty += 2;
- ; }
- ;}
-
- ;***********************************************************************
-
- ;void __asm unpackbytedeltaxor (register __a0 BYTE *bdata,
- ; register __a1 PLANEPTR plane,
- ; register __d0 WORD bytesperrow,
- ; register __a2 WORD *dirty);
-
- ; d1 = x
- ; d2 = tmp
- ; d3 = count
- ; d4 = w
- ; d5 = first
- ; d6 = last
- ; d7 = ub, temporary
-
- ; a3 = bp
- ; a4 = y
-
- _unpackbytedeltaxor
- movem.l d2-d7/a2-a4,-(sp)
- ext.l d0 ; bytesperrow
- moveq #0,d1 ; x = 0
- .xloop moveq #-1,d5 ; first = -1
- moveq #-1,d6 ; last = -1
- movea.l a1,a3 ; bp = plane
- addq.l #1,a1 ; plane++
- suba.l a4,a4 ; y = 0
- moveq #0,d3
- move.b (a0)+,d3 ; count = *bdata++
- bra .endloop2
- .loop2 moveq #0,d4
- move.b (a0)+,d4 ; w = *bdata++
- ble 1$ ; branch if w <= 0
- adda.l d4,a4 ; y += w
- mulu.w d0,d4
- adda.l d4,a3 ; bp += w * bytesperrow
- .endloop2 dbra d3,.loop2
- bra .endxloop
-
- 1$ beq 3$ ; branch if w == 0
- tst.w d5
- bge 2$ ; branch if first >= 0
- move.w a4,d5 ; first = y
- 2$ and.w #$7f,d4 ; w &= 0x7f
- adda.l d4,a4 ; y += w
- move.w a4,d6 ; last = y
- move.w d4,d7
- lsr.w #3,d4
- and.w #7,d7
-
- add.w d7,d7
- move.w d7,d2
- add.w d7,d7
- add.w d2,d7
-
- neg.w d7
- jmp (.endwloop,pc,d7.w)
- .wloop
- REPT 8
- move.b (a0)+,d7 ; tmp = *data++
- eor.b d7,(a3) ; *bp ^= tmp
- adda.l d0,a3 ; bp += bytesperrow
- ENDR
-
- .endwloop dbra d4,.wloop
- dbra d3,.loop2
- bra .endxloop
-
- 3$ tst.w d5
- bge 4$ ; branch if first >= 0
- move.w a4,d5 ; first = y
- 4$ moveq #0,d7
- move.b (a0)+,d7 ; ub = *bdata++
- adda.l d7,a4 ; y += ub
- move.w a4,d6 ; last = y
- move.b (a0)+,d4 ; w = *bdata++
- move.w d7,d2
- lsr.w #3,d7
- and.w #7,d2
-
- add.w d2,d2
- add.w d2,d2
-
- neg.w d2
- jmp (.endubloop,pc,d2.w)
- .ubloop
- REPT 8
- eor.b d4,(a3) ; *bp ^= w
- adda.l d0,a3 ; bp += bytesperrow
- ENDR
-
- .endubloop dbra d7,.ubloop
-
- dbra d3,.loop2
-
- .endxloop tst.w d5
- blt 8$ ; branch if first < 0
- move.w (a2),d7
- blt 5$ ; branch if dirty[0] < 0
- cmp.w d5,d7
- ble 6$ ; branch if dirty[0] <= first
- 5$ move.w d5,(a2) ; dirty[0] = first
- 6$ move.w (2,a2),d7
- blt 7$ ; branch if dirty[1] < 0
- cmp.w d6,d7
- bge 8$ ; branch if dirty[1] >= last
- 7$ move.w d6,(2,a2) ; dirty[1] = last
- 8$ move.w d1,d7
- and.w #3,d7
- cmp.w #3,d7
- bne 9$
- addq.l #4,a2 ; dirty += 2
- 9$ addq.w #1,d1 ; x++
- cmp.w d0,d1
- blt .xloop ; branch if x < bytesperrow
- movem.l (sp)+,d2-d7/a2-a4
- rts
-
- ;***********************************************************************
-
- ;void __asm unpackbytedeltanodirty (register __a0 BYTE *bdata,
- ; register __a1 PLANEPTR plane,
- ; register __d0 WORD bytesperrow);
-
- ; d1 = bytesperrrow - x
- ; d3 = count
- ; d4 = w
- ; d7 = ub, temporary
-
- ; a3 = bp
-
- _unpackbytedeltanodirty
- movem.l d2-d7/a2-a3,-(sp)
- ext.l d0 ; bytesperrow
- move.l d0,d1 ; x
- bra .endxloop
- .xloop movea.l a1,a3 ; bp = plane
- addq.l #1,a1 ; plane++
- moveq #0,d3
- move.b (a0)+,d3 ; count = *bdata++
- bra .endloop2
-
- .loop2 moveq #0,d4
- move.b (a0)+,d4 ; w = *bdata++
- ble 1$ ; branch if w <= 0
- mulu.w d0,d4
- adda.l d4,a3 ; bp += w * bytesperrow
-
- .endloop2 dbra d3,.loop2
- bra .endxloop
-
- 1$ beq 3$ ; branch if w == 0
- and.w #$7f,d4 ; w &= 0x7f
- move.w d4,d6
- lsr.w #3,d4
- and.w #7,d6
- add.w d6,d6
- add.w d6,d6
- neg.w d6
- jmp (.endwloop,pc,d6.w)
- .wloop move.b (a0)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.b (a0)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.b (a0)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.b (a0)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.b (a0)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.b (a0)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.b (a0)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.b (a0)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- .endwloop dbra d4,.wloop
-
- dbra d3,.loop2
- bra .endxloop
-
- 3$ moveq #0,d7
- move.b (a0)+,d7 ; ub = *bdata++
- move.b (a0)+,d4 ; w = *bdata++
- move.w d7,d6
- lsr.w #3,d7
- and.w #7,d6
- add.w d6,d6
- add.w d6,d6
- neg.w d6
- jmp (.endubloop,pc,d6.w)
- .ubloop move.b d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.b d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.b d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.b d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.b d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.b d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.b d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.b d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- .endubloop dbra d7,.ubloop
-
- dbra d3,.loop2
-
- .endxloop dbra d1,.xloop
- movem.l (sp)+,d2-d7/a2-a3
- rts
-
- ;***********************************************************************
-
- ;void __asm unpackbytedeltanodirtyxor (register __a0 BYTE *bdata,
- ; register __a1 PLANEPTR plane,
- ; register __a4 PLANEPTR otherplane,
- ; register __d0 WORD bytesperrow,
- ; register __d2 int height);
-
- ; d1 = bytesperrrow - x
- ; d2 = height
- ; d3 = count
- ; d4 = w
- ; d5 = y
- ; d7 = ub, temporary
-
- ; a3 = bp
- ; a5 = otherbp
-
- _unpackbytedeltanodirtyxor
- movem.l d2-d7/a2-a5,-(sp)
- ext.l d0 ; bytesperrow
- move.l d0,d1 ; x
- bra .endxloop
- .xloop movea.l a1,a3 ; bp = plane
- addq.l #1,a1 ; plane++
- movea.l a4,a5 ; otherbp = otherplane
- addq.l #1,a4 ; otherplane++
- move.w d2,d5 ; y = height
- moveq #0,d3
- move.b (a0)+,d3 ; count = *bdata++
- bra .endloop2
-
- .loop2 moveq #0,d4
- move.b (a0)+,d4 ; w = *bdata++
- ble 1$ ; branch if w <= 0
-
- sub.w d4,d5 ; y -= w
-
- move.w d4,d6
- lsr.w #3,d4
- and.w #7,d6
-
- mulu.w #6,d6
- neg.w d6
- jmp (.endcopyloop,pc,d6.w)
-
- .copyloop REPT 8
- move.b (a5),(a3) ; *bp = *otherbp
- adda.l d0,a5 ; otherbp += bytesperrow
- adda.l d0,a3 ; bp += bytesperrow
- ENDR
- .endcopyloop
- dbra d4,.copyloop
-
- .endloop2 dbra d3,.loop2
- bra .endx
-
- 1$ beq 3$ ; branch if w == 0
- and.w #$7f,d4 ; w &= 0x7f
-
- sub.w d4,d5 ; y -= w
-
- move.w d4,d6
- lsr.w #3,d4
- and.w #7,d6
-
- mulu.w #12,d6
-
- neg.w d6
- jmp (.endwloop,pc,d6.w)
- .wloop
- REPT 8
- move.b (a5),d6 ; tmp = *otherbp
- adda.l d0,a5 ; otherbp += bytesperrow
- move.b (a0)+,d7 ; tmp2 = *data++
- eor.b d7,d6 ; tmp ^= tmp2
- move.b d6,(a3) ; *bp = tmp
- adda.l d0,a3 ; bp += bytesperrow
- ENDR
-
- .endwloop dbra d4,.wloop
-
- dbra d3,.loop2
- bra .endx
-
- 3$ moveq #0,d7
- move.b (a0)+,d7 ; ub = *bdata++
- move.b (a0)+,d4 ; w = *bdata++
-
- sub.w d7,d5 ; y -= ub
-
- move.w d7,d6
- lsr.w #3,d7
- and.w #7,d6
-
- mulu.w #10,d6
-
- neg.w d6
- jmp (.endubloop,pc,d6.w)
- .ubloop
- REPT 8
- move.b (a5),d6 ; tmp = *otherbp
- adda.l d0,a5 ; otherbp += bytesperrow
- eor.b d4,d6 ; tmp ^= w
- move.b d6,(a3) ; *bp = tmp
- adda.l d0,a3 ; bp += bytesperrow
- ENDR
-
- .endubloop dbra d7,.ubloop
-
- dbra d3,.loop2
-
- .endx move.w d5,d6 ; y
- ble .endxloop
-
- lsr.w #3,d5
- and.w #7,d6
-
- mulu.w #6,d6
- neg.w d6
- jmp (.endcopyloop2,pc,d6.w)
-
- .copyloop2 REPT 8
- move.b (a5),(a3) ; *bp = *otherbp
- adda.l d0,a5 ; otherbp += bytesperrow
- adda.l d0,a3 ; bp += bytesperrow
- ENDR
- .endcopyloop2
- dbra d5,.copyloop2
-
- .endxloop dbra d1,.xloop
- movem.l (sp)+,d2-d7/a2-a5
- rts
-
- ;***********************************************************************
-
- ;void __asm unpackanim7long (register __a0 BYTE *bdata,
- ; register __a4 LONG *data,
- ; register __a1 PLANEPTR plane,
- ; register __d0 WORD bytesperrow,
- ; register __a2 WORD *dirty);
-
- ; d1 = x
- ; d2 = temporary
- ; d3 = count
- ; d4 = w
- ; d5 = first
- ; d6 = last
- ; d7 = ub, temporary
-
- ; a3 = lp
- ; a5 = y
-
- _unpackanim7long
- movem.l d2-d7/a2-a5,-(sp)
- ext.l d0 ; bytesperrow
- moveq #0,d1 ; x = 0
- .xloop moveq #-1,d5 ; first = -1
- moveq #-1,d6 ; last = -1
- movea.l a1,a3 ; lp = plane
- addq.l #4,a1 ; plane++
- suba.l a5,a5 ; y = 0
- moveq #0,d3
- move.b (a0)+,d3 ; count = *bdata++
- bra .endloop2
- .loop2 moveq #0,d4
- move.b (a0)+,d4 ; w = *bdata++
- ble 1$ ; branch if w <= 0
- adda.l d4,a5 ; y += w
- mulu.w d0,d4
- adda.l d4,a3 ; lp += w * bytesperrow
- dbra d3,.loop2
- bra .endxloop
-
- 1$ beq 3$ ; branch if w == 0
- tst.w d5
- bge 2$ ; branch if first >= 0
- move.w a5,d5 ; first = y
- 2$ and.w #$7f,d4 ; w &= 0x7f
- adda.l d4,a5 ; y += w
- move.w a5,d6 ; last = y
- move.w d4,d2
- lsr.w #3,d4
- and.w #7,d2
- add.w d2,d2
- add.w d2,d2
- neg.w d2
- jmp (.endwloop,pc,d2.w)
- .wloop move.l (a4)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.l (a4)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.l (a4)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.l (a4)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.l (a4)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.l (a4)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.l (a4)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.l (a4)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- .endwloop dbra d4,.wloop
- dbra d3,.loop2
- bra .endxloop
-
- 3$ tst.w d5
- bge 4$ ; branch if first >= 0
- move.w a5,d5 ; first = y
- 4$ moveq #0,d7
- move.b (a0)+,d7 ; ub = *bdata++
- adda.l d7,a5 ; y += ub
- move.w a5,d6 ; last = y
- move.l (a4)+,d4 ; w = *data++
- move.w d7,d2
- lsr.w #3,d7
- and.w #7,d2
- add.w d2,d2
- add.w d2,d2
- neg.w d2
- jmp (.endubloop,pc,d2.w)
- .ubloop move.l d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.l d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.l d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.l d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.l d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.l d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.l d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.l d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- .endubloop dbra d7,.ubloop
- .endloop2 dbra d3,.loop2
-
- .endxloop tst.w d5
- blt 8$ ; branch if first < 0
- move.w (a2),d7
- blt 5$ ; branch if dirty[0] < 0
- cmp.w d5,d7
- ble 6$ ; branch if dirty[0] <= first
- 5$ move.w d5,(a2) ; dirty[0] = first
- 6$ move.w (2,a2),d7
- blt 7$ ; branch if dirty[1] < 0
- cmp.w d6,d7
- bge 8$ ; branch if dirty[1] >= last
- 7$ move.w d6,(2,a2) ; dirty[1] = last
- 8$ addq.l #4,a2 ; dirty += 2
- addq.w #4,d1 ; x += 4
- cmp.w d0,d1
- blt .xloop ; branch if x < bytesperrow
- movem.l (sp)+,d2-d7/a2-a5
- rts
-
- ;***********************************************************************
-
- ;void __asm unpackanim7longnodirty (register __a0 BYTE *bdata,
- ; register __a4 LONG *data,
- ; register __a1 PLANEPTR plane,
- ; register __d0 WORD bytesperrow);
-
- ; d1 = (bytesperrow - x) >> 2
- ; d3 = count
- ; d4 = w
- ; d6 = temporary
- ; d7 = ub, temporary
-
- ; a3 = lp
-
- _unpackanim7longnodirty
- movem.l d2-d7/a2-a4,-(sp)
- ext.l d0 ; bytesperrow
- move.w d0,d1
- lsr.w #2,d1
- bra .endxloop
- .xloop movea.l a1,a3 ; lp = plane
- addq.l #4,a1 ; plane++
- moveq #0,d3
- move.b (a0)+,d3 ; count = *bdata++
- bra .endloop2
-
- .loop2 moveq #0,d4
- move.b (a0)+,d4 ; w = *bdata++
- ble 1$ ; branch if w <= 0
- mulu.w d0,d4
- adda.l d4,a3 ; lp += w * bytesperrow
-
- .endloop2 dbra d3,.loop2
- bra .endxloop
-
- 1$ beq 3$ ; branch if w == 0
- 2$ and.w #$7f,d4 ; w &= 0x7f
- move.w d4,d6
- lsr.w #3,d4
- and.w #7,d6
- add.w d6,d6
- add.w d6,d6
- neg.w d6
- jmp (.endwloop,pc,d6.w)
- .wloop move.l (a4)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.l (a4)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.l (a4)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.l (a4)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.l (a4)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.l (a4)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.l (a4)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.l (a4)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- .endwloop dbra d4,.wloop
-
- dbra d3,.loop2
- bra .endxloop
-
- 3$ moveq #0,d7
- move.b (a0)+,d7 ; ub = *bdata++
- move.l (a4)+,d4 ; w = *data++
- move.w d7,d6
- lsr.w #3,d7
- and.w #7,d6
- add.w d6,d6
- add.w d6,d6
- neg.w d6
- jmp (.endubloop,pc,d6.w)
- .ubloop move.l d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.l d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.l d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.l d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.l d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.l d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.l d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.l d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- .endubloop dbra d7,.ubloop
-
- dbra d3,.loop2
-
- .endxloop dbra d1,.xloop
- movem.l (sp)+,d2-d7/a2-a4
- rts
-
- ;***********************************************************************
-
- ;void __asm unpackanim7word (register __a0 BYTE *bdata,
- ; register __a4 WORD *data,
- ; register __a1 PLANEPTR plane,
- ; register __d0 WORD bytesperrow,
- ; register __a2 WORD *dirty);
-
- ; d1 = x
- ; d2 = temporary
- ; d3 = count
- ; d4 = w
- ; d5 = first
- ; d6 = last
- ; d7 = ub, temporary
-
- ; a3 = lp
- ; a5 = y
-
- _unpackanim7word
- movem.l d2-d7/a2-a5,-(sp)
- ext.l d0 ; bytesperrow
- moveq #0,d1 ; x = 0
- .xloop moveq #-1,d5 ; first = -1
- moveq #-1,d6 ; last = -1
- movea.l a1,a3 ; lp = plane
- addq.l #2,a1 ; plane++
- suba.l a5,a5 ; y = 0
- moveq #0,d3
- move.b (a0)+,d3 ; count = *bdata++
- bra .endloop2
- .loop2 moveq #0,d4
- move.b (a0)+,d4 ; w = *bdata++
- ble 1$ ; branch if w <= 0
- adda.l d4,a5 ; y += w
- mulu.w d0,d4
- adda.l d4,a3 ; lp += w * bytesperrow
- dbra d3,.loop2
- bra .endxloop
-
- 1$ beq 3$ ; branch if w == 0
- tst.w d5
- bge 2$ ; branch if first >= 0
- move.w a5,d5 ; first = y
- 2$ and.w #$7f,d4 ; w &= 0x7f
- adda.l d4,a5 ; y += w
- move.w a5,d6 ; last = y
- move.w d4,d2
- lsr.w #3,d4
- and.w #7,d2
- add.w d2,d2
- add.w d2,d2
- neg.w d2
- jmp (.endwloop,pc,d2.w)
- .wloop move.w (a4)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.w (a4)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.w (a4)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.w (a4)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.w (a4)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.w (a4)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.w (a4)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.w (a4)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- .endwloop dbra d4,.wloop
- dbra d3,.loop2
- bra .endxloop
-
- 3$ tst.w d5
- bge 4$ ; branch if first >= 0
- move.w a5,d5 ; first = y
- 4$ moveq #0,d7
- move.b (a0)+,d7 ; ub = *bdata++
- adda.l d7,a5 ; y += ub
- move.w a5,d6 ; last = y
- move.w (a4)+,d4 ; w = *data++
- move.w d7,d2
- lsr.w #3,d7
- and.w #7,d2
- add.w d2,d2
- add.w d2,d2
- neg.w d2
- jmp (.endubloop,pc,d2.w)
- .ubloop move.w d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.w d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.w d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.w d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.w d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.w d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.w d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.w d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- .endubloop dbra d7,.ubloop
- .endloop2 dbra d3,.loop2
-
- .endxloop tst.w d5
- blt 8$ ; branch if first < 0
- move.w (a2),d7
- blt 5$ ; branch if dirty[0] < 0
- cmp.w d5,d7
- ble 6$ ; branch if dirty[0] <= first
- 5$ move.w d5,(a2) ; dirty[0] = first
- 6$ move.w (2,a2),d7
- blt 7$ ; branch if dirty[1] < 0
- cmp.w d6,d7
- bge 8$ ; branch if dirty[1] >= last
- 7$ move.w d6,(2,a2) ; dirty[1] = last
- 8$ btst #1,d1
- beq 9$
- addq.l #4,a2 ; dirty += 2
- 9$ addq.w #2,d1 ; x += 2
- cmp.w d0,d1
- blt .xloop ; branch if x < bytesperrow
- movem.l (sp)+,d2-d7/a2-a5
- rts
-
- ;***********************************************************************
-
- ;void __asm unpackanim7wordnodirty (register __a0 BYTE *bdata,
- ; register __a4 WORD *data,
- ; register __a1 PLANEPTR plane,
- ; register __d0 WORD bytesperrow);
-
- ; d1 = (bytesperrow - x) >> 2
- ; d3 = count
- ; d4 = w
- ; d6 = temporary
- ; d7 = ub, temporary
-
- ; a3 = lp
-
- _unpackanim7wordnodirty
- movem.l d2-d7/a2-a4,-(sp)
- ext.l d0 ; bytesperrow
- move.w d0,d1
- lsr.w #1,d1
- bra .endxloop
- .xloop movea.l a1,a3 ; lp = plane
- addq.l #2,a1 ; plane++
- moveq #0,d3
- move.b (a0)+,d3 ; count = *bdata++
- bra .endloop2
-
- .loop2 moveq #0,d4
- move.b (a0)+,d4 ; w = *bdata++
- ble 1$ ; branch if w <= 0
- mulu.w d0,d4
- adda.l d4,a3 ; lp += w * bytesperrow
-
- .endloop2 dbra d3,.loop2
- bra .endxloop
-
- 1$ beq 3$ ; branch if w == 0
- 2$ and.w #$7f,d4 ; w &= 0x7f
- move.w d4,d6
- lsr.w #3,d4
- and.w #7,d6
- add.w d6,d6
- add.w d6,d6
- neg.w d6
- jmp (.endwloop,pc,d6.w)
- .wloop move.w (a4)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.w (a4)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.w (a4)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.w (a4)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.w (a4)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.w (a4)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.w (a4)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.w (a4)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- .endwloop dbra d4,.wloop
-
- dbra d3,.loop2
- bra .endxloop
-
- 3$ moveq #0,d7
- move.b (a0)+,d7 ; ub = *bdata++
- move.w (a4)+,d4 ; w = *data++
- move.w d7,d6
- lsr.w #3,d7
- and.w #7,d6
- add.w d6,d6
- add.w d6,d6
- neg.w d6
- jmp (.endubloop,pc,d6.w)
- .ubloop move.w d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.w d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.w d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.w d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.w d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.w d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.w d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.w d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- .endubloop dbra d7,.ubloop
-
- dbra d3,.loop2
-
- .endxloop dbra d1,.xloop
- movem.l (sp)+,d2-d7/a2-a4
- rts
-
- ;***********************************************************************
-
- ;void __asm unpackanim8long (register __a0 LONG *data,
- ; register __a1 PLANEPTR plane,
- ; register __d0 WORD bytesperrow,
- ; register __a2 WORD *dirty);
-
- ; d1 = x
- ; d2 = temporary
- ; d3 = count
- ; d4 = w
- ; d5 = first
- ; d6 = last
- ; d7 = ub, temporary
-
- ; a3 = lp
- ; a4 = y
-
- _unpackanim8long
- movem.l d2-d7/a2-a4,-(sp)
- ext.l d0 ; bytesperrow
- moveq #0,d1 ; x = 0
- .xloop moveq #-1,d5 ; first = -1
- moveq #-1,d6 ; last = -1
- movea.l a1,a3 ; lp = plane
- addq.l #4,a1 ; plane++
- suba.l a4,a4 ; y = 0
- move.l (a0)+,d3 ; count = *data++
- bra .endloop2
- .loop2 move.l (a0)+,d4 ; w = *data++
- ble 1$ ; branch if w <= 0
- adda.l d4,a4 ; y += w
- mulu.w d0,d4
- adda.l d4,a3 ; lp += w * bytesperrow
- dbra d3,.loop2
- bra .endxloop
-
- 1$ beq 3$ ; branch if w == 0
- tst.w d5
- bge 2$ ; branch if first >= 0
- move.w a4,d5 ; first = y
- 2$ and.l #$7fffffff,d4 ; w &= 0x7fffffff
- adda.l d4,a4 ; y += w
- move.w a4,d6 ; last = y
- move.w d4,d2
- lsr.w #3,d4
- and.w #7,d2
- add.w d2,d2
- add.w d2,d2
- neg.w d2
- jmp (.endwloop,pc,d2.w)
- .wloop move.l (a0)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.l (a0)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.l (a0)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.l (a0)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.l (a0)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.l (a0)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.l (a0)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.l (a0)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- .endwloop dbra d4,.wloop
- dbra d3,.loop2
- bra .endxloop
-
- 3$ tst.w d5
- bge 4$ ; branch if first >= 0
- move.w a4,d5 ; first = y
- 4$ move.l (a0)+,d7 ; ub = *data++
- adda.l d7,a4 ; y += ub
- move.w a4,d6 ; last = y
- move.l (a0)+,d4 ; w = *data++
- move.w d7,d2
- lsr.w #3,d7
- and.w #7,d2
- add.w d2,d2
- add.w d2,d2
- neg.w d2
- jmp (.endubloop,pc,d2.w)
- .ubloop move.l d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.l d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.l d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.l d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.l d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.l d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.l d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.l d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- .endubloop dbra d7,.ubloop
- .endloop2 dbra d3,.loop2
-
- .endxloop tst.w d5
- blt 8$ ; branch if first < 0
- move.w (a2),d7
- blt 5$ ; branch if dirty[0] < 0
- cmp.w d5,d7
- ble 6$ ; branch if dirty[0] <= first
- 5$ move.w d5,(a2) ; dirty[0] = first
- 6$ move.w (2,a2),d7
- blt 7$ ; branch if dirty[1] < 0
- cmp.w d6,d7
- bge 8$ ; branch if dirty[1] >= last
- 7$ move.w d6,(2,a2) ; dirty[1] = last
- 8$ addq.l #4,a2 ; dirty += 2
- addq.w #4,d1 ; x += 4
- cmp.w d0,d1
- blt .xloop ; branch if x < bytesperrow
- movem.l (sp)+,d2-d7/a2-a4
- rts
-
- ;***********************************************************************
-
- ;void __asm unpackanim8longnodirty (register __a0 LONG *data,
- ; register __a1 PLANEPTR plane,
- ; register __d0 WORD bytesperrow);
-
- ; d1 = (bytesperrow - x) >> 2
- ; d3 = count
- ; d4 = w
- ; d7 = ub, temporary
-
- ; a3 = lp
-
- _unpackanim8longnodirty
- movem.l d2-d7/a2-a3,-(sp)
- ext.l d0 ; bytesperrow
- move.w d0,d1
- lsr.w #2,d1
- bra .endxloop
- .xloop movea.l a1,a3 ; lp = plane
- addq.l #4,a1 ; plane++
- move.l (a0)+,d3 ; count = *data++
- bra .endloop2
-
- .loop2 move.l (a0)+,d4 ; w = *data++
- ble 1$ ; branch if w <= 0
- mulu.w d0,d4
- adda.l d4,a3 ; lp += w * bytesperrow
-
- .endloop2 dbra d3,.loop2
- bra .endxloop
-
- 1$ beq 3$ ; branch if w == 0
- 2$ and.l #$7fffffff,d4 ; w &= 0x7fffffff
- move.w d4,d6
- lsr.w #3,d4
- and.w #7,d6
- add.w d6,d6
- add.w d6,d6
- neg.w d6
- jmp (.endwloop,pc,d6.w)
- .wloop move.l (a0)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.l (a0)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.l (a0)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.l (a0)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.l (a0)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.l (a0)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.l (a0)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.l (a0)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- .endwloop dbra d4,.wloop
-
- dbra d3,.loop2
- bra .endxloop
-
- 3$ move.l (a0)+,d7 ; ub = *data++
- move.l (a0)+,d4 ; w = *data++
- move.w d7,d6
- lsr.w #3,d7
- and.w #7,d6
- add.w d6,d6
- add.w d6,d6
- neg.w d6
- jmp (.endubloop,pc,d6.w)
- .ubloop move.l d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.l d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.l d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.l d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.l d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.l d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.l d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.l d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- .endubloop dbra d7,.ubloop
-
- dbra d3,.loop2
- .endxloop dbra d1,.xloop
- movem.l (sp)+,d2-d7/a2-a3
- rts
-
- ;***********************************************************************
-
- ;void __asm unpackanim8word (register __a0 WORD *data,
- ; register __a1 PLANEPTR plane,
- ; register __d0 WORD bytesperrow,
- ; register __a2 WORD *dirty);
-
- ; d1 = x
- ; d2 = temporary
- ; d3 = count
- ; d4 = w
- ; d5 = first
- ; d6 = last
- ; d7 = ub, temporary
-
- ; a3 = lp
- ; a4 = y
-
- _unpackanim8word
- movem.l d2-d7/a2-a4,-(sp)
- ext.l d0 ; bytesperrow
- moveq #0,d1 ; x = 0
- .xloop moveq #-1,d5 ; first = -1
- moveq #-1,d6 ; last = -1
- movea.l a1,a3 ; lp = plane
- addq.l #2,a1 ; plane++
- suba.l a4,a4 ; y = 0
- move.w (a0)+,d3 ; count = *data++
- bra .endloop2
- .loop2 move.w (a0)+,d4 ; w = *data++
- ble 1$ ; branch if w <= 0
- adda.w d4,a4 ; y += w
- mulu.w d0,d4
- adda.l d4,a3 ; lp += w * bytesperrow
- dbra d3,.loop2
- bra .endxloop
-
- 1$ beq 3$ ; branch if w == 0
- tst.w d5
- bge 2$ ; branch if first >= 0
- move.w a4,d5 ; first = y
- 2$ and.w #$7fff,d4 ; w &= 0x7fff
- adda.w d4,a4 ; y += w
- move.w a4,d6 ; last = y
- move.w d4,d2
- lsr.w #3,d4
- and.w #7,d2
- add.w d2,d2
- add.w d2,d2
- neg.w d2
- jmp (.endwloop,pc,d2.w)
- .wloop move.w (a0)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.w (a0)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.w (a0)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.w (a0)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.w (a0)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.w (a0)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.w (a0)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.w (a0)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- .endwloop dbra d4,.wloop
- dbra d3,.loop2
- bra .endxloop
-
- 3$ tst.w d5
- bge 4$ ; branch if first >= 0
- move.w a4,d5 ; first = y
- 4$ move.w (a0)+,d7 ; ub = *data++
- adda.w d7,a4 ; y += ub
- move.w a4,d6 ; last = y
- move.w (a0)+,d4 ; w = *data++
- move.w d7,d2
- lsr.w #3,d7
- and.w #7,d2
- add.w d2,d2
- add.w d2,d2
- neg.w d2
- jmp (.endubloop,pc,d2.w)
- .ubloop move.w d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.w d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.w d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.w d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.w d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.w d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.w d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.w d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- .endubloop dbra d7,.ubloop
- .endloop2 dbra d3,.loop2
-
- .endxloop tst.w d5
- blt 8$ ; branch if first < 0
- move.w (a2),d7
- blt 5$ ; branch if dirty[0] < 0
- cmp.w d5,d7
- ble 6$ ; branch if dirty[0] <= first
- 5$ move.w d5,(a2) ; dirty[0] = first
- 6$ move.w (2,a2),d7
- blt 7$ ; branch if dirty[1] < 0
- cmp.w d6,d7
- bge 8$ ; branch if dirty[1] >= last
- 7$ move.w d6,(2,a2) ; dirty[1] = last
- 8$ btst #1,d1
- beq 9$
- addq.l #4,a2 ; dirty += 2
- 9$ addq.w #2,d1 ; x += 2
- cmp.w d0,d1
- blt .xloop ; branch if x < bytesperrow
- movem.l (sp)+,d2-d7/a2-a4
- rts
-
- ;***********************************************************************
-
- ;void __asm unpackanim8wordnodirty (register __a0 WORD *data,
- ; register __a1 PLANEPTR plane,
- ; register __d0 WORD bytesperrow);
-
- ; d1 = (bytesperrow - x) >> 2
- ; d3 = count
- ; d4 = w
- ; d7 = ub, temporary
-
- ; a3 = lp
-
- _unpackanim8wordnodirty
- movem.l d2-d7/a2-a3,-(sp)
- ext.l d0 ; bytesperrow
- move.w d0,d1
- lsr.w #1,d1
- bra .endxloop
- .xloop movea.l a1,a3 ; lp = plane
- addq.l #2,a1 ; plane++
- move.w (a0)+,d3 ; count = *data++
- bra .endloop2
-
- .loop2 move.w (a0)+,d4 ; w = *data++
- ble 1$ ; branch if w <= 0
- mulu.w d0,d4
- adda.l d4,a3 ; lp += w * bytesperrow
-
- .endloop2 dbra d3,.loop2
- bra .endxloop
-
- 1$ beq 3$ ; branch if w == 0
- 2$ and.w #$7fff,d4 ; w &= 0x7fff
- move.w d4,d6
- lsr.w #3,d4
- and.w #7,d6
- add.w d6,d6
- add.w d6,d6
- neg.w d6
- jmp (.endwloop,pc,d6.w)
- .wloop move.w (a0)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.w (a0)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.w (a0)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.w (a0)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.w (a0)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.w (a0)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.w (a0)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- move.w (a0)+,(a3) ; *lp = *data++
- adda.l d0,a3 ; lp += bytesperrow
- .endwloop dbra d4,.wloop
-
- dbra d3,.loop2
- bra .endxloop
-
- 3$ move.w (a0)+,d7 ; ub = *data++
- move.w (a0)+,d4 ; w = *data++
- move.w d7,d6
- lsr.w #3,d7
- and.w #7,d6
- add.w d6,d6
- add.w d6,d6
- neg.w d6
- jmp (.endubloop,pc,d6.w)
- .ubloop move.w d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.w d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.w d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.w d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.w d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.w d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.w d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- move.w d4,(a3) ; *lp = w
- adda.l d0,a3 ; lp += bytesperrow
- .endubloop dbra d7,.ubloop
-
- dbra d3,.loop2
-
- .endxloop dbra d1,.xloop
- movem.l (sp)+,d2-d7/a2-a3
- rts
-
- ;***********************************************************************
-
- end
-